package com.learn.juc;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;

/**
 * ClassName:Learn
 * Package:com.learn.juc
 * Description:
 *
 * @Author:@郭先森
 * @Create:2025/7/28 - 20:56
 * @Version:v1.0
 */
//Fork/Join
//Fork/Join可以将一个大的任务拆分成多个子任务进行并行的处理，最后将子任务的结果合并成最后的计算结果，并进行输出。Fork/Join框架要完成两件事
//Fork：把一个复杂的任务进行分拆，大事化小
//Join：把分拆任务的结果进行合并
//计算从 1+2+3+4+5+.....+100
//两个数相加，让差值不能超过10
//拆分成 1~50  51~100 两份
//    1~25 26~50
//  1~12 13~25
public class Learn {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ForkJoin forkJoin = new ForkJoin(1,100);
        //创建一个分支合并池的对象
        ForkJoinPool forkJoinPool = new ForkJoinPool();
        ForkJoinTask<Integer> task = forkJoinPool.submit(forkJoin);
        //获取最终合并之后的结果
        Integer ret = task.get();
        System.out.println("result: "+ret);
        //关闭池对象
        forkJoinPool.shutdown();
    }
}
